package com.obelisco.vista.seguridad;

import java.util.HashSet;
import java.util.Iterator;
import java.util.ResourceBundle;
import java.util.Set;
import java.util.Vector;

import nextapp.echo2.app.Alignment;
import nextapp.echo2.app.Extent;
import nextapp.echo2.app.SplitPane;
import nextapp.echo2.app.layout.SplitPaneLayoutData;
import nextapp.echo2.extras.app.layout.AccordionPaneLayoutData;

import com.obelisco.modelo.beans.TipoMenu;
import com.obelisco.modelo.data.CarpetaTransaccion;
import com.obelisco.modelo.data.Transaccion;
import com.obelisco.modelo.data.Usuario;
import com.obelisco.modelo.servicios.seguridad.IServicioDatosUsuario;
import com.obelisco.modelo.servicios.seguridad.IServicioSeguridad;

public class ContenedorMenuUsuario extends ContenedorEmergente implements IComponenteUsuario {

	private ResourceBundle resourceBundle;

	private Usuario usuario;

	private PaneDatosUsuario paneDatosUsuario;

	private BarraEjecucion barraEjecucion;

	private ArbolSeguridad menuUsuario;

	private IServicioDatosUsuario servicioDatosUsuario;

	private IServicioSeguridad servicioSeguridad;

//	private ArbolSeguridad preferidos;

	private Vector<EjecutarListener> listeners = new Vector<EjecutarListener>();

	/**
	 * Creates a new <code>ContenedorMenuUsuario</code>.
	 */
	public ContenedorMenuUsuario() {
		super();

		// Add design-time configured components.
		initComponents();
	}

	private EjecutarListener manejoEventoEjecutar = new EjecutarListener() {

		public void onClickCarpeta(CarpetaTransaccion carpeta) {
			// No se hace nada
		}

		public void onClickTransaccion(Transaccion transaccion) {
			distribuirEventoTransaccion(transaccion);
		}

	};

	/**
	 * Configures initial state of component. WARNING: AUTO-GENERATED METHOD.
	 * Contents will be overwritten.
	 */
	private void initComponents() {

		SplitPane paneMenuUsuario = new SplitPane();
		paneMenuUsuario.setOrientation(SplitPane.ORIENTATION_VERTICAL_TOP_BOTTOM);
		paneMenuUsuario.setSeparatorPosition(new Extent(34, Extent.PX));
		barraEjecucion = new BarraEjecucion();
		barraEjecucion.addEjecutarListener(manejoEventoEjecutar);
		paneMenuUsuario.add(barraEjecucion);

		MenuExpandible menuExpandible1 = new MenuExpandible();
		menuExpandible1.setStyleName("Obelisco.MenuExpandible");
		paneMenuUsuario.add(menuExpandible1);

		paneDatosUsuario = new PaneDatosUsuario();
		AccordionPaneLayoutData paneDatosUsuarioLayoutData = new AccordionPaneLayoutData();
		paneDatosUsuarioLayoutData.setTitle("Datos de Usuario");
		paneDatosUsuario.setLayoutData(paneDatosUsuarioLayoutData);
		menuExpandible1.add(paneDatosUsuario);
		
		menuUsuario = new ArbolSeguridad();		
		menuUsuario.addEjecutarListener(manejoEventoEjecutar);
		AccordionPaneLayoutData menuUsuarioLayoutData = new AccordionPaneLayoutData();
		menuUsuarioLayoutData.setTitle("Menu de Usuario");
		menuUsuario.setLayoutData(menuUsuarioLayoutData);
		menuExpandible1.add(menuUsuario);

//		preferidos = new ArbolSeguridad();
//		AccordionPaneLayoutData preferidosLayoutData = new AccordionPaneLayoutData();
//		preferidosLayoutData.setTitle("Preferidos");
//		preferidos.setLayoutData(preferidosLayoutData);
//		preferidos.addEjecutarListener(manejoEventoEjecutar);
//		menuExpandible1.add(preferidos);

		getAreaTrabajo().add(paneMenuUsuario);
	}

	public void distribuirEventoTransaccion(Transaccion t) {

		for (Iterator i = listeners.iterator(); i.hasNext();) {
			EjecutarListener l = (EjecutarListener) i.next();
			l.onClickTransaccion(t);
		}

	}

	public void addContenedorMenuUsuarioListener(EjecutarListener listener) {
		listeners.add(listener);
	}

	public void removeContenedorMenuUsuarioListener(EjecutarListener listener) {
		listeners.remove(listener);
	}

	public void setUsuario(Usuario usuario) {
		// TODO Auto-generated method stub

		//this.usuario = servicioDatosUsuario.buscarUsuario(usuario.getLogin());
		this.usuario = usuario;
		paneDatosUsuario.setUsuario(usuario);
		menuUsuario.setRaiz(usuario.getFunciones());
		menuUsuario.setVisible(this.usuario.getTipoMenu().equals(TipoMenu.ARBOL));

//		CarpetaTransaccion pref = new CarpetaTransaccion();
//		pref.setTransacciones(usuario.getFuncionespreferidas());		
//		preferidos.setRaiz(pref);

	}

	public IServicioDatosUsuario getServicioDatosUsuario() {
		return servicioDatosUsuario;
	}

	public void setServicioDatosUsuario(
			IServicioDatosUsuario servicioDatosUsuario) {
		this.servicioDatosUsuario = servicioDatosUsuario;
		paneDatosUsuario.setServicioDatosUsuario(this.servicioDatosUsuario);
	}

	public IServicioSeguridad getServicioSeguridad() {
		return servicioSeguridad;
	}

	public void setServicioSeguridad(IServicioSeguridad servicioSeguridad) {
		this.servicioSeguridad = servicioSeguridad;
		this.barraEjecucion.setServicioSeguridad(servicioSeguridad);
	}

}
